package com.yociyy.admin.controller;

import java.util.List;
import java.util.Map;
import java.util.Set;

import com.yociyy.admin.biz.BaseDeptBiz;
import com.yociyy.admin.model.entity.BaseDept;
import com.yociyy.common.core.msg.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 部门信息
 *
 * @author Y.yang
 * @date 2019/12/2
 */
@RestController
@RequestMapping("dept")
public class BaseDeptController {

	@Autowired
	protected BaseDeptBiz deptBiz;

	/**
	 * 部门信息条件查询
	 *
	 * @param params 条件查询
	 * @return 部门信息列表
	 */
	@GetMapping("/list")
	public R list(@RequestParam Map<String, Object> params) {
		return R.success(deptBiz.selectDeptList(params));
	}

	/**
	 * 新增部门信息
	 *
	 * @param dept 部门信息
	 */
	@PostMapping
	public R addDept(@RequestBody BaseDept dept) {
		deptBiz.insertDept(dept);
		return R.success();
	}

	/**
	 * 通过部门id查询部门信息
	 *
	 * @param id 部门id
	 * @return 部门信息
	 */
	@GetMapping("/get/{id}")
	public R get(@PathVariable int id) {
		// return R.success(deptBiz.selectById(id));
		return null;
	}

	/**
	 * 更新部门信息
	 *
	 * @param dept 部门信息
	 */
	@PutMapping
	public R putDept(@RequestBody BaseDept dept) {
		if (dept.getId().equals(dept.getParentId())) {
			R.error("操作失败，上级部门不能是自己");
		}
		deptBiz.updateDept(dept);
		return R.success();
	}

	/**
	 * 删除部门信息
	 * 
	 * @param id 部门id
	 * @return 结果
	 */
	@DeleteMapping("/{id}")
	public R remove(@PathVariable("id") Long id) {
		if (deptBiz.checkDeptExistUser(id)) {
			R.error("部门存在关联用户，请解除用户关联后再试");
		}
		if (deptBiz.checkHasChildByDeptId(id)) {
			R.error("部门存在子节点，不允许删除");
		}
		deptBiz.deleteById(id);
		return R.success();
	}

	/**
	 * 获取角色部门（数据权限）树
	 */
	@GetMapping("/role/{roleId}")
	public Set<String> deptTree(@PathVariable("roleId") Long roleId) {
		if (null == roleId || roleId <= 0) {
			return null;
		}
		return deptBiz.roleDeptIds(roleId);
	}
}